import { JKManager } from "../JKManager";

/**
 * 手机相册管理
 */
export class AlbumManager {
    private _chooseImgsCall: (paths: string[]) => void

    init() {
        cc.log(`${cc.js.getClassName(this)} init`);

        (window as any).JKManager.onChooseImgsDone = (paths: string[]) => {
            this.onChooseImgsDone(paths)
        }

        // Test
        // this.chooseImgs((paths: string[]) => {  
        // }, 2, 1)
        // this.takePhoto((paths: string[]) => {
        // }, 1)
    }

    //==============================================================================================================================
    //========================================================= 内部方法 ============================================================
    //==============================================================================================================================

    //==============================================================================================================================
    //========================================================= 外部方法 ============================================================
    //==============================================================================================================================

    /**
     * 选择图片
     * @param call 回调，(string[] 图片路径数组)
     * @param maxNum 最大选择数量，默认1张
     * @param ratio 指定宽高比，默认不指定
     */
    chooseImgs(call: (paths: string[]) => void, maxNum: number = 1, ratio: number = 0) {
        cc.log(`${cc.js.getClassName(this)} chooseImgs maxNum = ${maxNum} ratio = ${ratio}`)

        this._chooseImgsCall = call
        cc.log(`${cc.js.getClassName(this)} chooseImgs this._chooseImgsCall = ${this._chooseImgsCall}`)
        if (!CC_PREVIEW) {
            if (cc.sys.isNative && !cc.sys.isBrowser) {
                if (cc.sys.os === cc.sys.OS_ANDROID) {
                    jsb.reflection.callStaticMethod(`jkCore/album/AlbumManager`, `chooseImgs`, `(Ljava/lang/String;Ljava/lang/String;)V`, maxNum.toString(), ratio.toString())
                } else if (cc.sys.os === cc.sys.OS_IOS) {
                    jsb.reflection.callStaticMethod(`AlbumManager`, `chooseImgsWithMaxNum:ratio:`, maxNum.toString(), ratio.toString())
                }
            }
        }
    }

    /**
     * 拍照或相册选图后的回调
     * @param paths 图片地址
     */
    onChooseImgsDone(paths: string[]) {
        cc.log(`${cc.js.getClassName(this)} onChooseImgsDone paths = ${paths}`)

        if (paths.length > 0) {
            cc.log(`${cc.js.getClassName(this)} onChooseImgsDone this._chooseImgsCall = ${this._chooseImgsCall}`)
            this._chooseImgsCall && this._chooseImgsCall(paths)
        }
    }

    /**
     * 拍照
     * @param call 回调，(string[] 图片路径数组)
     * @param ratio 指定宽高比，默认不指定
     */
    takePhoto(call: (paths: string[]) => void, ratio: number = 0) {
        cc.log(`${cc.js.getClassName(this)} takePhoto ratio = ${ratio}`)

        this._chooseImgsCall = call
        cc.log(`${cc.js.getClassName(this)} chooseImgs this._chooseImgsCall = ${this._chooseImgsCall}`)
        if (!CC_PREVIEW) {
            if (cc.sys.isNative && !cc.sys.isBrowser) {
                if (cc.sys.os === cc.sys.OS_ANDROID) {
                    jsb.reflection.callStaticMethod(`jkCore/album/AlbumManager`, `takePhoto`, `(Ljava/lang/String;)V`, ratio.toString())
                } else if (cc.sys.os === cc.sys.OS_IOS) {
                    jsb.reflection.callStaticMethod(`AlbumManager`, `takePhotoWithMaxNum:ratio:`, ratio.toString())
                }
            }
        }
    }
}